// cf-314(r187)-c
// 题意：
//
// 题解：
//
// run: $exec < input
#include <iostream>

int const len = 1000007;
long long const mo = 1000000007;

long long tree[len];
long long dp[len];
int n;

int lowbit(int x) { return -x & x; }

long long query(int id)
{
	long long ret = 0;
	for (; id; id -= lowbit(id)) ret = (ret + tree[id]) % mo;
	return ret;
}

void update(int id, long long delta)
{
	for (; id < len; id += lowbit(id)) tree[id] = (tree[id] + delta) % mo;
}

int main()
{
	std::ios::sync_with_stdio(false);
	std::cin >> n;
	for (int i = 1; i <= n; i++) {
		long long x;
		std::cin >> x;
		long long tmp = ((query(x) * x) % mo + x) % mo;
		update(x, tmp - dp[x]);
		dp[x] = tmp;
	}
	long long ans = 0;
	for (int i = 1; i < len; i++)
		ans = (ans + dp[i]) % mo;
	std::cout << (ans + mo) % mo << '\n';
}

